在使用git的过程中,总有一天你会遇到下面的问题:)
这些也是在开发过程中很常见的问题,以下也是作者的经验之谈,有不对的地方还请指出。
最后一次commit信息写错了
如果只是提交信息写错了信息,可以通过以下命令单独修改提交信息
1 | $ git commit --amend |
注意: 通过这样的过程修改提交信息后,相当于删除原来的提交,重新提交了一次。所有如果你在修改前已经将错误的那次提交push到服务端,那在修改后就需要通过 git pull 来合并代码(类似于两个分支了)。
通过git log --graph --oneline查看就会发现两个分支合并的痕迹
最后一次commit少添加一个文件
1 | $ git add file1 |
最后一次commit多添加一个文件
1 | $ git rm --cached file1 |
移除add过的文件
1 | #方法一 |
回退本地commit(还未push)
这种情况发生在你的本地仓库,可能你add,commit以后发现代码有点问题,打算取消提交,用到下面命令
1 | #只会保留源码(工作区),回退commit(本地仓库)与index(暂存区)到某个版本 |
当然有人在push代码以后,也是用reset –hard回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变化。
!!!可以通过 git push –force 将本地的回退推送到服务端,但是除非你很清楚在这么做, 不推荐.
所以,这种情况你要使用下面的方式了。
回退本地commit(已经push)
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令
1 | $ git revert <commit_id> |
注意:
- git revert 用于反转提交,执行命令时要求工作树必须是干净的。
- git revert 用一个新的提交来消除一个历时提交所做出的修改
回退单个文件的历史版本
1 | #查看历史版本 |
修改提交历史中的author和email
旧的:author:Old-Author email:old@mail.com
新的:author:New-Author email:new@mail.com
1.在git仓库内创建下面的脚本,如change.sh
1 | !/bin/sh |
2.运行脚本
1 | $ sh change.sh |
忽略已提交的文件(.iml)
- 删除已提交的文件
1
2# 删除项目中所有的.iml后缀的文件
$ find . -name "*.iml" | xargs rm -f - 添加
.gitignore文件1
2*.iml
/**/*.iml
持续更新中~~~



